package com.example.thread.base.demo2;

import java.util.concurrent.AbstractExecutorService;

/**
 * @author LiYuhang
 * @version 0.1
 * @application
 * @Date 2020/8/14 11:09
 */
public class demo2_2 {

/**
 *                 ThreadPoolExecutor、AbstractExecutorService、ExecutorService和Executor几个之间的关系。
 *
 *             　　Executor是一个顶层接口，在它里面只声明了一个方法execute(Runnable)，返回值为void，参数为Runnable类型，
 *                 从字面意思可以理解，就是用来执行传进去的任务的；
 *
 *             　　然后ExecutorService接口继承了Executor接口，并声明了一些方法：submit、invokeAll、invokeAny以及shutDown等；
 *
 *             　　抽象类AbstractExecutorService实现了ExecutorService接口，基本实现了ExecutorService中声明的所有方法；
 *
 *             　　然后ThreadPoolExecutor继承了类AbstractExecutorService。
 *
 *             　　在ThreadPoolExecutor类中有几个非常重要的方法：
 *
 *              execute()  通过这个方法可以向线程池提交一个任务，交由线程池去执行。
 *              submit() 这个方法也是用来向线程池提交任务的，但是它和execute()方法不同，它能够返回任务执行的结果，去看submit()方法的实现，
 *                          会发现它实际上还是调用的execute()方法，只不过它利用了Future来获取任务执行结果
 *              shutdown()  关闭线程池 不会立即终止线程池，而是要等所有任务缓存队列中的任务都执行完后才终止，但再也不会接受新的任务
 *              shutdownNow() 立刻关闭线程池 并尝试打断正在执行的任务，并且清空任务缓存队列，返回尚未执行的任务
 *
 *              getQueue() 、getPoolSize() 、getActiveCount()、getCompletedTaskCount()等获取与线程池相关属性的方法
 */

}
